package jplat.core.session;

/**
 * 会话对象接口类.
 * 1. 由于Redis和序列化限制,暂不支持泛型序列化.
 * 2. 但是可以将泛型对象包装成 一个成员对象，进行序列化.参考,DnAuthGrapper
 * 2. 可以用Spring-Redis实现.
 * 3. 可以用Java对象序列化-反序列化优化，但是那样就不通用了.
 * @author zhangcq
 *
 */
public interface JSession
{
	public static final String K_USER_INFO="_UsR1_iNf_";		//用户键.
	public static final String K_ENC_KEY="_EnC2_aS_";			//加密键 一般为AES密钥.
	
	public boolean isNew();							//是否是新建会话.
	public int sessType();							//获取会话类型.
	public String getSessionID();					//获取会话ID
	public static final int SESS_HTTP = 200;		//HTTP类型的会话.
	public static final int SESS_REDIS = 300;		//redis类型的会话.
	
	//协商密钥
	public String getEncKey( String type );
	public boolean setEncKey( String type, String encKey );
	
	//客户信息管理.
	public boolean setUserInfo( Object obj ) /* throws JSystemException*/;
	public Object getUserInfo() 			 /*throws JSystemException*/;
	
	//保存key-value
	public String getValue( String key );
	public boolean setValue( String key, String value );
	public boolean removeValue( String key );
	
	public Object getObj( String key );
	public boolean setObj( String key, Object value );
	public boolean removeObj( String key );
	
	//检查会话是否存在.即客户是否登录了.
	public boolean isValid();
	
	//销毁会话
	public boolean destroy();
}
